/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Sql;
import java.util.ArrayList;


import org.me.codigo.Baldor;
/**
 *
 * @author Lizardo Rios Villavicencio
 */
public class ContactoLOG {
private String resultado = null;
            
    private void insertar(Contacto c) {
        String sql = "INSERT INTO contactos VALUES("+ c.getCodContacto() +"," +
                "'"+ c.getNombres() +"',"+
                "'"+ c.getTelefono() +"'," +
                "'"+ c.getLocalidad() +"',"+
                "'"+ c.getEmail() +"',"+
                "'"+ c.getComentario() +"');";
        
        resultado = Sql.ejecuta(sql);
    }
    
    private int obtenerCodigoContacto () {
        ArrayList lista = new ArrayList();
        int codigo = 0;
        int[] tipos = new int[0];
        String[] campos = new String[0];
        String sql = "SELECT MAX(cod_contacto) AS cod_contacto FROM contactos;"; 
        lista = (ArrayList)Sql.consulta(sql, tipos, campos);
        if (lista != null) {
            if (lista.size() > 1) {
                String[] unaFila = (String[])lista.get(1);
                codigo = (unaFila[0] == null) ? 1 : Baldor.aEntero(unaFila[0]) + 1;
            }
        }
        return codigo;
    }
    
    public void insertar(Contacto c, boolean activo) {
        c.setCodContacto(obtenerCodigoContacto());
        if (activo) {
            int[] tipos = new int[6];
            String[] campos = new String[6];
            String sql = "INSERT INTO contactos VALUES(?,?,?,?,?,?)"; 
            tipos[0] = 6;   campos[0] = Baldor.aCadena(c.getCodContacto());
            tipos[1] = 8;   campos[1] = c.getNombres();
            tipos[2] = 8;   campos[2] = c.getTelefono();
            tipos[3] = 8;   campos[3] = c.getLocalidad();
            tipos[4] = 8;   campos[4] = c.getEmail();
            tipos[5] = 8;   campos[5] = c.getComentario();
            resultado = Sql.ejecuta(sql, tipos, campos);
        } else {
            insertar(c);
        }
    }
    
    public void modificar(Contacto c, boolean activo) {
        if (activo) {
            int[] tipos = new int[6];
            String[] campos = new String[6];
            String sql = "UPDATE contactos SET nombres = ?," +
                         "telefono = ?," +
                         "localidad = ?," +
                         "email = ?," +
                         "comentario = ? " +
                         "WHERE cod_contacto = ?";
            tipos[0] = 8;   campos[0] = c.getNombres();
            tipos[1] = 8;   campos[1] = c.getTelefono();
            tipos[2] = 6;   campos[2] = c.getLocalidad();
            tipos[3] = 6;   campos[3] = c.getEmail();
            tipos[4] = 6;   campos[4] = c.getComentario();
            tipos[5] = 6;   campos[5] = Baldor.aCadena(c.getCodContacto());
            resultado = Sql.ejecuta(sql, tipos, campos);
        } else {
            //modificar(c); // falta implementar esta operacion
        }
    }
    
    public void eliminar(Contacto c, boolean activo) {
        if (activo) {
            int[] tipos = new int[1];
            String[] campos = new String[1];
            String sql = "DELETE FROM contactos WHERE cod_contacto = ?";
            tipos[0] = 6;   campos[0] = Baldor.aCadena(c.getCodContacto());
            resultado = Sql.ejecuta(sql, tipos, campos);
        } else {
            //eliminar(c);    // falta implementar esta operacion
        }
    }
    
   
    /////////////////////////////////////////////////////////////////////////
    
    public ArrayList listarContacto() {
        int[] tipos = new int[0];           // no olvidar de dimensionar siempre los arreglos
        String[] campos = new String[0];
        String sql = "SELECT  c.cod_contacto, c.nombres, c.telefono, " +
                     "        c.localidad, c.email, c.comentario, " +
                     "        to_char(c.fecha_envio,'DD/MM/YYYY HH:MM:SS AM') AS fecha " +
                     "FROM contactos c " +
                     "ORDER BY c.cod_contacto DESC;";
        return (ArrayList) Sql.consulta(sql, tipos, campos);
    }
    
    public ArrayList listarConctactoXcodigo(Contacto bContacto) {
        int codContacto = bContacto.getCodContacto();
        int[] tipos = new int[1];           // no olvidar de dimensionar siempre los arreglos
        String[] campos = new String[1];
        String sql = "SELECT  c.cod_contacto, c.nombres, c.telefono, " +
                     "        c.localidad, c.email, c.comentario, " +
                     "        to_char(c.fecha_envio,'DD/MM/YYYY HH:MM:SS AM') as fecha " +
                     "FROM contactos c " +
                     "WHERE c.cod_contacto = ?;";
        tipos[0] = 6;   campos[0] = Baldor.aCadena(codContacto);
        return (ArrayList) Sql.consulta(sql, tipos, campos);
    }
    
    public ArrayList filtrarContacto(int opcion, String valor) {
        String cabecera = "SELECT  c.cod_contacto, c.nombres, c.telefono, " +
                          "        c.localidad, c.email, c.comentario, " +
                          "        to_char(c.fecha_envio,'DD/MM/YYYY HH:MM:SS AM') as fecha " +
                          "FROM contactos c " +
                          "WHERE ";
        String condicion = "";
        String sql = "";
        String pie = "ORDER BY c.cod_contacto DESC;";
        int codigo = 0;
        int[] tipos = new int[0];           // no olvidar de dimensionar siempre los arreglos
        String[] campos = new String[0];
        switch(opcion) {
            case 1:
                codigo = (valor == null) ? 0 : Baldor.aEntero(valor);
                condicion = "c.cod_contacto = "+ codigo +" ";
                break;
            case 2:
                condicion = "c.nombres LIKE '"+ valor +"%' ";
                break;
            case 3:
                condicion = "c.telefono LIKE '"+ valor +"%' ";
                break;
            case 4:
                condicion = "c.localidad LIKE '"+ valor +"%' ";
                break;
            case 5:
                condicion = "c.email LIKE '"+ valor +"%' ";
                break;
            case 6:
                condicion = "c.comentario LIKE '"+ valor +"%' ";
                break;
        }
        sql = cabecera + condicion + pie;
        return (ArrayList) Sql.consulta(sql, tipos, campos);
    }
    
    public ArrayList filtrarContacto(String fechaInicio, String fechaFin) {
        String sql = "";
        int[] tipos = new int[0];           // no olvidar de dimensionar siempre los arreglos
        String[] campos = new String[0];
        sql = "SELECT  c.cod_contacto, c.nombres, c.telefono, " +
              "        c.localidad, c.email, c.comentario, " +
              "        to_char(c.fecha_envio,'DD/MM/YYYY HH:MM:SS AM') as fecha " +
              "FROM contactos c " +
              "WHERE c.fecha_envio BETWEEN '"+ fechaInicio +"' AND '"+ fechaFin +"' " +
              "ORDER BY c.cod_contacto DESC;";
        return (ArrayList) Sql.consulta(sql, tipos, campos);
    }
    
    public boolean getError() {
        return (Boolean)Sql.getEstadoError();
    }
    
    public String getMensaje() {
        if (Sql.getEstadoError())
            resultado += Sql.getNombreError();
        return this.resultado;
    }    
}
